package tk.mybatis.simple.mapper;

import tk.mybatis.simple.model.SysUser;

import java.util.List;
import java.util.Map;

public interface UserMapper {
    /**
     * 根据动态条件查询用户信息
     * @param sysUser
     * @return
     */
    List<SysUser> selectByUserWithIf(SysUser sysUser);

    /**
     * 根据主键更新
     * 一般情况下，MyBatis 中选择性更新的方法名会以 Selective 作为后缀
     * @param sysUser
     * @return
     */
    int updateByIdSelective(SysUser sysUser);

    SysUser selectById(Long id);

    int insert(SysUser sysUser);

    /**
     * 根据用户 id 或用户名查询
     * 在已有的 sys_user 表中，除了主键 id 外，我们认为 user_name（用户名）也是唯一的，所有的用户名都不可以重复。现在进行如下查询：当参数 id 有值的时候优先使用 id 查询，
     * 当 id 没有值时就去判断用户名是否有值，如果有值就用用户名查询，如果用户名也没有值，就使 SQL 查询无结果。
     * @param sysUser
     * @return
     */
    SysUser selectByIdOrUserName(SysUser sysUser);

    /**
     * 根据用户 id 集合查询
     * @param idList
     * @return
     */
    List<SysUser> selectByIdList(List<Long> idList);

    /**
     * 根据用户 id 集合查询
     * @param idArray
     * @return
     */
    List<SysUser> selectByIdList(Long[] idArray);

    /**
     * 批量插入用户信息
     * @param userList
     * @return
     */
    int insertList(List<SysUser> userList);

    /**
     * 通过 Map 更新列
     * 这里没有通过 @Param 注解指定参数名，因而 MyBatis 在内部的上下文中使用了默认值 _parameter 作为该参数的 key，所以在 XML 中也使用了 _parameter。
     * @param map
     * @return
     */
    int updateByMap(Map<String, Object> map);
}
